/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package thienphuc.patient.dao.impl;

import java.math.BigInteger;
import java.security.MessageDigest;
import java.security.NoSuchAlgorithmException;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.hibernate.criterion.Criterion;
import org.hibernate.criterion.Restrictions;
import thienphuc.patient.dao.AbstractHibernateDaoSupport;
import thienphuc.patient.dao.NhanVienDAO;
import thienphuc.patient.dto.NhanVien;

/**
 *
 * @author QuocDat
 */
public class NhanVienDAOImpl extends AbstractHibernateDaoSupport<NhanVien, Integer> implements NhanVienDAO {

    public NhanVienDAOImpl(Class<NhanVien> classPersistent) {
        super(classPersistent);
    }

    public NhanVien findByTenTaiKhoan(String tenTaiKhoan) {
        List<NhanVien> nhanViensList = this.findByProperty(NHAN_VIEN_TEN_TAI_KHOAN, tenTaiKhoan);
        if(nhanViensList.size() > 0 && nhanViensList != null){
            return nhanViensList.get(0);
        }
        return new NhanVien();
    }

    public List<NhanVien> findByHoTen(String hoTen) {
        Criterion criterion = Restrictions.like(NHAN_VIEN_HO_TEN, "%" + hoTen + "%");
        return this.findByCriteria(criterion);
    }

    public NhanVien dangNhap(String tenTaiKhoan, String matKhau) {
        try {
            MessageDigest md5 = MessageDigest.getInstance("MD5");
            md5.update(matKhau.getBytes());

            BigInteger hash = new BigInteger(1, md5.digest());
            String matKhauMD5 = hash.toString(16);
            
            Criterion criterionTenTaiKhoan = Restrictions.eq(NHAN_VIEN_TEN_TAI_KHOAN, tenTaiKhoan);
            Criterion criterionMatKhau = Restrictions.eq(NHAN_VIEN_MAT_KHAU, matKhauMD5);
            List<NhanVien> nhanViensList = this.findByCriteria(criterionTenTaiKhoan, criterionMatKhau);
            if(nhanViensList.size() > 0 && nhanViensList != null){
                return nhanViensList.get(0);
            }
        } catch (NoSuchAlgorithmException ex) {
            Logger.getLogger(NhanVienDAOImpl.class.getName()).log(Level.SEVERE, ex.getMessage(), ex);
        }
        return new NhanVien();
    }
}
